package com.stefanini.pe.bbva.mbl.in.bo;

import org.apache.log4j.Logger;
import org.quartz.CronTrigger;
import org.quartz.Scheduler;

import com.stefanini.pe.bbva.mbl.carga.in.to.Corporativa;
import com.stefanini.pe.bbva.mbl.carga.in.to.CorporativaKey;
import com.stefanini.pe.bbva.mbl.in.bo.iface.CargaArchivoBO;
import com.stefanini.pe.bbva.mbl.in.dao.iface.CorporativaDAO;
import com.stefanini.pe.bbva.mbl.in.utils.Constantes;

public class CargaArchivoBOImpl implements CargaArchivoBO {
	private static Logger logger = Logger.getLogger(CargaArchivoBOImpl.class);
	private CorporativaDAO corporativaDAO = null;
	private Scheduler monitor;
	
	public Scheduler getMonitor() {
		return monitor;
	}

	public void setMonitor(Scheduler monitor) {
		this.monitor = monitor;
	}

	public CorporativaDAO getCorporativaDAO() {
		return corporativaDAO;
	}

	public void setCorporativaDAO(CorporativaDAO corporativaDAO) {
		this.corporativaDAO = corporativaDAO;
	}

	public void actualizarHoraQuartz(int idArchivo, String nuevaHora) throws Exception {
		String strCron = null;
		String strNombreTrigger = null;
		CronTrigger testCronTrigger = null;
		String horaCron = null;
		String minutoCron = null;
		int intHora = 0;
		int intMinuto = 0;

		
		logger.info("Inicio");
		
		if(nuevaHora == null) {
			logger.error("Hora es nula");
			return;
		}
		
		intHora = Integer.parseInt(nuevaHora.substring(0, 2));
		
		if(intHora > 23 || intHora < 0) {
			logger.error("La hora no es valida");
			throw new Exception("La hora no es valida");			
		}
		
		intMinuto = Integer.parseInt(nuevaHora.substring(3, 5));
		
		if(intMinuto > 60 || intMinuto < 0) {
			logger.error("El minuto no es valido");
			throw new Exception("El minuto no es valido");
		}
		
		horaCron = intHora + "";
		minutoCron = intMinuto + "";

		strCron = "0 " + minutoCron + " " + horaCron + " * * ?";    
		
		switch (idArchivo) {
		case Constantes.ID_ARCHIVO_COBRANZA:
			strNombreTrigger = Constantes.TRIGGER_COBRANZA;
			testCronTrigger = (CronTrigger) monitor.getTrigger(strNombreTrigger, "DEFAULT");
			testCronTrigger.setCronExpression(strCron);
			break;
			//Agregando casuistica para generar archivo de Contratos de tipo RE
		case Constantes.ID_ARCHIVO_PAGOS_CONTRATO_RE:
			strNombreTrigger = Constantes.TRIGGER_PAGOS_CONTRATO_RE;
			testCronTrigger = (CronTrigger) monitor.getTrigger(strNombreTrigger, "DEFAULT");
			testCronTrigger.setCronExpression(strCron);
			break;
			
		default:
			break;
		}

		if (testCronTrigger != null) {
			monitor.rescheduleJob(strNombreTrigger, "DEFAULT",
					testCronTrigger);
		} else {
			logger.error("Ocurrio un Problema al cambiar Cron");
			throw new Exception("Ocurrio un Problema al cambiar Cron");
		}
		
		logger.info("Fin");		
	}
	
	public void inicializarHoraQuartz() {
		CorporativaKey key = null;
		Corporativa coorporativa = null;
		String hora = null;
		
		try {
			logger.info("Inicio");
			
			key = new CorporativaKey();
			
			key.setCodTab("T12");
			key.setCodEle("1");			
			
			coorporativa = corporativaDAO.selectByPrimaryKey(key);
			hora = coorporativa.getDato1();
			
			if(hora != null) {
				actualizarHoraQuartz(Constantes.ID_ARCHIVO_COBRANZA, hora);
			}
			
			logger.info("Fin");
		} catch(Exception e) {
			logger.error(e.getMessage(), e);
		}
	}

	public void inicializarHoraArcPagosContREQuartz() {
		CorporativaKey key = null;
		Corporativa coorporativa = null;
		String hora = null;
		
		try {
			logger.info("Inicio");
			
			key = new CorporativaKey();
			
			key.setCodTab("T12");
			key.setCodEle("2");			
			
			coorporativa = corporativaDAO.selectByPrimaryKey(key);
			hora = coorporativa.getDato1();
			
			if(hora != null) {
				actualizarHoraQuartz(Constantes.ID_ARCHIVO_PAGOS_CONTRATO_RE, hora);
			}
			
			logger.info("Fin");
		} catch(Exception e) {
			logger.error(e.getMessage(), e);
		}
	}

}